from datetime import datetime

from django.db import models, transaction
from conf.config import TABLE_PREFIX

table_prefix = TABLE_PREFIX  # 数据库表名前缀


class BaseModel(models.Model):
    # 抽象的模型基类，定义一些公共的模型字段
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    is_delete = models.BooleanField(default=False, verbose_name='软删除标记')

    class Meta:
        # 声明这是一个抽象的模型，在执行迁移文件时，不会在数据中生成表
        abstract = True
        verbose_name = '公共字段模型'
        verbose_name_plural = verbose_name

    @transaction.atomic
    def delete(self, using=None, cascade=True, *args, **kwargs):
        """
            重写删除方法,直接开启软删除
        """

        self.is_delete = True
        self.save(using=using)

        # 关联删除表数据用到得时候再写
        # if cascade:
        #     self.delete_related_objects(raise_exception=True)


class CoreModel(models.Model):
    # 抽象的模型基类，定义创建时间跟更新时间
    create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')

    class Meta:
        # 声明这是一个抽象的模型，在执行迁移文件时，不会在数据中生成表
        abstract = True
        verbose_name = '公共字段模型'
        verbose_name_plural = verbose_name

